<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1">
<title>Sun&rsquo;s Streaming XML Parser Implementation - The Java EE 5 Tutorial</title>
<meta name="robots" content="index,follow">
<meta name="robots" content="index,follow">
<meta name="date" content="2008-10-01">
<link rel="stylesheet" type="text/css" href="css/default.css">
<link rel="stylesheet" type="text/css" href="css/ipg.css">
<link rel="stylesheet" type="text/css" href="css/j5eetutorial.css">
</head>

<body>

<table border="0" cellpadding="5" cellspacing="0" width="100%">
<tbody>
   <tr valign="top">
      <td><p class="toc level1"><a href="docinfo.html">Document Information</a></p>
<p class="toc level1 tocsp"><a href="gexaf.html">Preface</a></p>
<p class="toc level1 tocsp"><a href="gfirp.html">Part&nbsp;I&nbsp;Introduction</a></p>
<p class="toc level2"><a href="bnaaw.html">1.&nbsp;&nbsp;Overview</a></p>
<p class="toc level2"><a href="gfiud.html">2.&nbsp;&nbsp;Using the Tutorial Examples</a></p>
<p class="toc level1 tocsp"><a href="bnadp.html">Part&nbsp;II&nbsp;The Web Tier</a></p>
<p class="toc level2"><a href="bnadr.html">3.&nbsp;&nbsp;Getting Started with Web Applications</a></p>
<p class="toc level2"><a href="bnafd.html">4.&nbsp;&nbsp;Java Servlet Technology</a></p>
<p class="toc level2"><a href="bnagx.html">5.&nbsp;&nbsp;JavaServer Pages Technology</a></p>
<p class="toc level2"><a href="bnajo.html">6.&nbsp;&nbsp;JavaServer Pages Documents</a></p>
<p class="toc level2"><a href="bnakc.html">7.&nbsp;&nbsp;JavaServer Pages Standard Tag Library</a></p>
<p class="toc level2"><a href="bnalj.html">8.&nbsp;&nbsp;Custom Tags in JSP Pages</a></p>
<p class="toc level2"><a href="bnaon.html">9.&nbsp;&nbsp;Scripting in JSP Pages</a></p>
<p class="toc level2"><a href="bnaph.html">10.&nbsp;&nbsp;JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="bnaqz.html">11.&nbsp;&nbsp;Using JavaServer Faces Technology in JSP Pages</a></p>
<p class="toc level2"><a href="bnatx.html">12.&nbsp;&nbsp;Developing with JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="bnavg.html">13.&nbsp;&nbsp;Creating Custom UI Components</a></p>
<p class="toc level2"><a href="bnawo.html">14.&nbsp;&nbsp;Configuring JavaServer Faces Applications</a></p>
<p class="toc level2"><a href="bnaxu.html">15.&nbsp;&nbsp;Internationalizing and Localizing Web Applications</a></p>
<p class="toc level1 tocsp"><a href="bnayk.html">Part&nbsp;III&nbsp;Web Services</a></p>
<p class="toc level2"><a href="bnayl.html">16.&nbsp;&nbsp;Building Web Services with JAX-WS</a></p>
<p class="toc level2"><a href="bnazf.html">17.&nbsp;&nbsp;Binding between XML Schema and Java Classes</a></p>
<p class="toc level2"><a href="bnbdv.html">18.&nbsp;&nbsp;Streaming API for XML</a></p>
<p class="toc level3"><a href="bnbdw.html">Why StAX?</a></p>
<p class="toc level4"><a href="bnbdw.html#bnbdx">Streaming versus DOM</a></p>
<p class="toc level4"><a href="bnbdw.html#bnbdy">Pull Parsing versus Push Parsing</a></p>
<p class="toc level4"><a href="bnbdw.html#bnbdz">StAX Use Cases</a></p>
<p class="toc level4"><a href="bnbdw.html#bnbea">Comparing StAX to Other JAXP APIs</a></p>
<p class="toc level3 tocsp"><a href="bnbec.html">StAX API</a></p>
<p class="toc level4"><a href="bnbec.html#bnbed">Cursor API</a></p>
<p class="toc level4"><a href="bnbec.html#bnbee">Iterator API</a></p>
<p class="toc level5"><a href="bnbec.html#bnbef">Iterator Event Types</a></p>
<p class="toc level5"><a href="bnbec.html#bnbeh">Example of Event Mapping</a></p>
<p class="toc level4 tocsp"><a href="bnbec.html#bnbej">Choosing between Cursor and Iterator APIs</a></p>
<p class="toc level5"><a href="bnbec.html#bnbek">Development Goals</a></p>
<p class="toc level5"><a href="bnbec.html#bnbel">Comparing Cursor and Iterator APIs</a></p>
<p class="toc level3 tocsp"><a href="bnbem.html">Using StAX</a></p>
<p class="toc level4"><a href="bnbem.html#bnben">StAX Factory Classes</a></p>
<p class="toc level5"><a href="bnbem.html#bnbeo"><tt>XMLInputFactory</tt> Class</a></p>
<p class="toc level5"><a href="bnbem.html#bnbeq"><tt>XMLOutputFactory</tt> Class</a></p>
<p class="toc level5"><a href="bnbem.html#bnber"><tt>XMLEventFactory</tt> Class</a></p>
<p class="toc level4 tocsp"><a href="bnbem.html#bnbes">Resources, Namespaces, and Errors</a></p>
<p class="toc level5"><a href="bnbem.html#bnbet">Resource Resolution</a></p>
<p class="toc level5"><a href="bnbem.html#bnbeu">Attributes and Namespaces</a></p>
<p class="toc level5"><a href="bnbem.html#bnbev">Error Reporting and Exception Handling</a></p>
<p class="toc level4 tocsp"><a href="bnbem.html#bnbew">Reading XML Streams</a></p>
<p class="toc level5"><a href="bnbem.html#bnbex">Using <tt>XMLStreamReader</tt></a></p>
<p class="toc level5"><a href="bnbem.html#bnbfb">Using <tt>XMLEventReader</tt></a></p>
<p class="toc level4 tocsp"><a href="bnbem.html#bnbfe">Writing XML Streams</a></p>
<p class="toc level5"><a href="bnbem.html#bnbff">Using <tt>XMLStreamWriter</tt></a></p>
<p class="toc level5"><a href="bnbem.html#bnbfg">Using <tt>XMLEventWriter</tt></a></p>
<div class="onpage">
<p class="toc level3 tocsp"><a href="">Sun's Streaming XML Parser Implementation</a></p>
<p class="toc level4"><a href="#bnbfj">Reporting CDATA Events</a></p>
<p class="toc level4"><a href="#bnbfk">Streaming XML Parser Factories Implementation</a></p>
</div>
<p class="toc level3 tocsp"><a href="bnbfl.html">Example Code</a></p>
<p class="toc level4"><a href="bnbfl.html#bnbfm">Example Code Organization</a></p>
<p class="toc level4"><a href="bnbfl.html#bnbfn">Example XML Document</a></p>
<p class="toc level4"><a href="bnbfl.html#bnbfo">Cursor Example</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbfp">Stepping through Events</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbfq">Returning String Representations</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbfr">Building and Running the Cursor Example Using NetBeans IDE</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbfs">Building and Running the Cursor Example Using Ant</a></p>
<p class="toc level4 tocsp"><a href="bnbfl.html#bnbft">Cursor-to-Event Example</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbfu">Instantiating an <tt>XMLEventAllocator</tt></a></p>
<p class="toc level5"><a href="bnbfl.html#bnbfv">Creating an Event Iterator</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbfw">Creating the Allocator Method</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbfx">Building and Running the Cursor-to-Event Example Using NetBeans IDE</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbfy">Building and Running the Cursor-to-Event Example Using Ant</a></p>
<p class="toc level4 tocsp"><a href="bnbfl.html#bnbfz">Event Example</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbga">Creating an Input Factory</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgb">Creating an Event Reader</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgc">Creating an Event Iterator</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgd">Getting the Event Stream</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbge">Returning the Output</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgf">Building and Running the Event Example Using NetBeans IDE</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgg">Building and Running the Event Example Using Ant</a></p>
<p class="toc level4 tocsp"><a href="bnbfl.html#bnbgh">Filter Example</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgi">Implementing the <tt>StreamFilter</tt> Class</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgj">Creating an Input Factory</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgk">Creating the Filter</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgl">Capturing the Event Stream</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgm">Filtering the Stream</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgn">Returning the Output</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgo">Building and Running the Filter Example Using NetBeans IDE</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgp">Building and Running the Filter Example Using Ant</a></p>
<p class="toc level4 tocsp"><a href="bnbfl.html#bnbgq">Read-and-Write Example</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgr">Creating an Event Producer/Consumer</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgs">Creating an Iterator</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgt">Creating a Writer</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgu">Returning the Output</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgv">Building and Running the Read-and-Write Example Using NetBeans IDE</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgw">Building and Running the Read-and-Write Example Using Ant</a></p>
<p class="toc level4 tocsp"><a href="bnbfl.html#bnbgx">Writer Example</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgy">Creating the Output Factory</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbgz">Creating a Stream Writer</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbha">Writing the Stream</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbhb">Returning the Output</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbhc">Building and Running the Writer Example Using NetBeans IDE</a></p>
<p class="toc level5"><a href="bnbfl.html#bnbhd">Building and Running the Writer Example Using Ant</a></p>
<p class="toc level3 tocsp"><a href="bnbhe.html">Further Information about StAX</a></p>
<p class="toc level2 tocsp"><a href="bnbhf.html">19.&nbsp;&nbsp;SOAP with Attachments API for Java</a></p>
<p class="toc level1 tocsp"><a href="bnblr.html">Part&nbsp;IV&nbsp;Enterprise Beans</a></p>
<p class="toc level2"><a href="bnbls.html">20.&nbsp;&nbsp;Enterprise Beans</a></p>
<p class="toc level2"><a href="bnbnb.html">21.&nbsp;&nbsp;Getting Started with Enterprise Beans</a></p>
<p class="toc level2"><a href="bnboc.html">22.&nbsp;&nbsp;Session Bean Examples</a></p>
<p class="toc level2"><a href="bnbpk.html">23.&nbsp;&nbsp;A Message-Driven Bean Example</a></p>
<p class="toc level1 tocsp"><a href="bnbpy.html">Part&nbsp;V&nbsp;Persistence</a></p>
<p class="toc level2"><a href="bnbpz.html">24.&nbsp;&nbsp;Introduction to the Java Persistence API</a></p>
<p class="toc level2"><a href="bnbrl.html">25.&nbsp;&nbsp;Persistence in the Web Tier</a></p>
<p class="toc level2"><a href="bnbrs.html">26.&nbsp;&nbsp;Persistence in the EJB Tier</a></p>
<p class="toc level2"><a href="bnbtg.html">27.&nbsp;&nbsp;The Java Persistence Query Language</a></p>
<p class="toc level1 tocsp"><a href="bnbwi.html">Part&nbsp;VI&nbsp;Services</a></p>
<p class="toc level2"><a href="bnbwj.html">28.&nbsp;&nbsp;Introduction to Security in the Java EE Platform</a></p>
<p class="toc level2"><a href="bnbyk.html">29.&nbsp;&nbsp;Securing Java EE Applications</a></p>
<p class="toc level2"><a href="bncas.html">30.&nbsp;&nbsp;Securing Web Applications</a></p>
<p class="toc level2"><a href="bncdq.html">31.&nbsp;&nbsp;The Java Message Service API</a></p>
<p class="toc level2"><a href="bncgv.html">32.&nbsp;&nbsp;Java EE Examples Using the JMS API</a></p>
<p class="toc level2"><a href="bncih.html">33.&nbsp;&nbsp;Transactions</a></p>
<p class="toc level2"><a href="bncjh.html">34.&nbsp;&nbsp;Resource Connections</a></p>
<p class="toc level2"><a href="bncjx.html">35.&nbsp;&nbsp;Connector Architecture</a></p>
<p class="toc level1 tocsp"><a href="bnckn.html">Part&nbsp;VII&nbsp;Case Studies</a></p>
<p class="toc level2"><a href="bncko.html">36.&nbsp;&nbsp;The Coffee Break Application</a></p>
<p class="toc level2"><a href="bnclz.html">37.&nbsp;&nbsp;The Duke's Bank Application</a></p>
<p class="toc level1 tocsp"><a href="gexbq.html">Part&nbsp;VIII&nbsp;Appendixes</a></p>
<p class="toc level2"><a href="bncno.html">A.&nbsp;&nbsp;Java Encoding Schemes</a></p>
<p class="toc level2"><a href="bncnq.html">B.&nbsp;&nbsp;Preparation for Java EE Certification Exams</a></p>
<p class="toc level2"><a href="bncnt.html">C.&nbsp;&nbsp;About the Authors</a></p>
<p class="toc level1 tocsp"><a href="idx-1.html">Index</a></p>
</td>
      <td width="10px">&nbsp;</td>
      <td width="705px">
         <div class="header">
             <div class="header-links-top">
                 <a href="http://java.sun.com">java.sun.com</a> |
                 <a href="http://docs.sun.com/">docs.sun.com</a><br>
             </div> 
             <img src="graphics/tutorialBanner.gif" width="704" height="120" alt="The Java&trade; EE 5 Tutorial"/>
             <div class="header-links">
	         <a href="index.html">Home</a> |
                 <a href="http://java.sun.com/javaee/5/docs/tutorial/information/download.html">Download</a> |
                 <a href="http://java.sun.com/javaee/5/docs/tutorial/doc/JavaEETutorial.pdf">PDF</a> |
                 <a href="http://java.sun.com/javaee/5/docs/api/index.html">API</a> |
                 <a href="http://java.sun.com/javaee/5/docs/tutorial/information/faq.html">FAQ</a> |
                 <a href="http://java.sun.com/javaee/5/docs/tutorial/information/search.html">Search</a> |
                 <a href="http://java.sun.com/javaee/5/docs/tutorial/information/sendusmail.html">Feedback</a> |
                 <a href="http://java.sun.com/javaee/5/docs/tutorial/information/history.html">History</a>
             </div>
             <div class="navigation">
                 <a href="bnbem.html"><img style="padding-right: 3px" src="graphics/leftButton.gif" border="0"></a>
                 <a href="sjsaseej2eet.html"><img style="padding-right: 3px" src="graphics/upButton.gif" border="0"></a>
                 <a href="bnbfl.html"><img style="padding-left: 3px" src="graphics/rightButton.gif" border="0"></a>
             </div>
         </div>

	 <div class="maincontent">      	 
             

<a name="bnbfi"></a><h3>Sun&rsquo;s Streaming XML Parser Implementation</h3>
<a name="indexterm-1868"></a><a name="indexterm-1869"></a><p>Application Server includes Sun Microsystems&rsquo; JSR 173 (StAX) implementation, called the Sun Java
Streaming XML Parser (referred to as Streaming XML Parser). The Streaming XML Parser
is a high-speed, non-validating, W3C XML 1.0 and Namespace 1.0-compliant streaming XML pull
parser built upon the Xerces2 codebase.</p><p>In Sun&rsquo;s Streaming XML Parser implementation, the Xerces2 lower layers, particularly the Scanner
and related classes, have been redesigned to behave in a pull fashion. In
addition to the changes in the lower layers, the Streaming XML Parser includes
additional StAX-related functionality and many performance-enhancing improvements. The Streaming XML Parser is implemented in
the <tt>appserv-ws.jar</tt> and <tt>javaee.jar</tt> files, both of which are located in the <tt></tt><i>as-install</i><tt>/lib/</tt>
directory.</p><p>Included with this Java EE tutorial are StAX code examples, located in the
<tt></tt><i>tut-install</i><tt>/javaeetutorial5/examples/stax/</tt> directory, that illustrate how Sun&rsquo;s Streaming XML Parser implementation works. These examples are
described in <a href="bnbfl.html">Example Code</a>.</p><p>Before you proceed with the example code, there are two aspects of
the Streaming XML Parser of which you should be aware:</p>
<ul><li><p><a href="#bnbfj">Reporting CDATA Events</a></p></li>
<li><p><a href="#bnbfk">Streaming XML Parser Factories Implementation</a></p></li></ul>
<p>These topics are discussed below.</p>

<a name="bnbfj"></a><h4>Reporting CDATA Events</h4>
<a name="indexterm-1870"></a><a name="indexterm-1871"></a><p>The <tt>javax.xml.stream.XMLStreamReader</tt> implemented in the Streaming XML Parser does not report CDATA events.
If you have an application that needs to receive such events, configure the
<tt>XMLInputFactory</tt> to set the following implementation-specific <tt>report-cdata-event</tt> property:</p><pre>XMLInputFactory factory = XMLInptuFactory.newInstance();
factory.setProperty("report-cdata-event", Boolean.TRUE);</pre>

<a name="bnbfk"></a><h4>Streaming XML Parser Factories Implementation</h4>
<p>Most applications do not need to know the factory implementation class name. Just
adding the <tt>javaee.jar</tt> and <tt>appserv-ws.jar</tt> files to the classpath is sufficient for
most applications because these two jars supply the factory implementation classname for various
Streaming XML Parser properties under the <tt>META-INF/services/</tt> directory (for example, <tt>javax.xml.stream.XMLInputFactory</tt>, <tt>javax.xml.stream.XMLOutputFactory</tt>, and <tt>javax.xml.stream.XMLEventFactory</tt>).</p><p>However, there may be scenarios when an application would like to know about
the factory implementation class name and set the property explicitly. These scenarios could
include cases where there are multiple JSR 173 implementations in the classpath and
the application wants to choose one, perhaps one that has superior performance, contains
a crucial bug fix, or suchlike.</p><p>If an application sets the <tt>SystemProperty</tt>, it is the first step in a
lookup operation, and so obtaining the factory instance would be fast compared to
other options; for example:</p><pre>javax.xml.stream.XMLInputFactory -->
     com.sun.xml.stream.ZephyrParserFactory
javax.xml.stream.XMLOutputFactory -->
     com.sun.xml.stream.ZephyrWriterFactor
javax.xml.stream.XMLEventFactory -->
     com.sun.xml.stream.events.ZephyrEventFactory</pre>
         </div>
         <div class="navigation">
             <a href="bnbem.html"><img style="padding-right: 3px" src="graphics/leftButton.gif" border="0"></a>
             <a href="sjsaseej2eet.html"><img style="padding-right: 3px" src="graphics/upButton.gif" border="0"></a>
             <a href="bnbfl.html"><img style="padding-left: 3px" src="graphics/rightButton.gif" border="0"></a>
         </div>

         <div class="copyright">
      	    <p>The material in The Java&trade; EE 5 Tutorial is <a href='docinfo.html'>copyright</a>-protected and may not be published in other works without express written permission from Sun Microsystems.</p>
      	 </div>

      </td>
   </tr>
</tbody>
</table>
</body>
</html>

